(for Internet Explorer)
Function  GetStepPath( FullPath as string, BasePath as string ) as string
相対パスを返します。
【引数】
FullPath
BasePath
返り値が指すファイルと同じファイルのフル・パス
基準フォルダーのフル・パス
返り値
FullPath 引数が指すファイルと同じファイルの相対パス
テスト
→ T_Path.vbs
→ vbslib.vbs
ソース
T_GetStepPath
Assert  NormalizePath( "C:\folder\..\a" ) = "C:\a"
Assert  NormalizePath( "C:\..\a" ) = "C:\..\a"
Function  NormalizePath( Path as string ) as string
ファイル・パスの ".." や "." をなくします。
【引数】
Path
返り値
変換する前のファイル・パス
変換した後のファイル・パス
サンプル
ソース
→ vbslib.vbs
→ T_Path.vbs
テスト
T_NormalizePath
Assert  NormalizePath( "C:\folder\.\a" ) = "C:\folder\a"
Assert  NormalizePath( "C:\folder\a\" ) = "C:\folder\a"
Assert  NormalizePath( "C:\" ) = "C:\"
Assert  NormalizePath( "http://example.com/folder/" ) = "http://example.com/folder/"
末尾の \ はカットされますが、/ はカットされません。
Function  GetCaseSensitiveFullPath( StepPath as string ) as string
フル・パスを返します。 大文字小文字はファイル名に合わせます。
【引数】
StepPath
返り値と同じファイルの相対パス、または、フルパス
大文字小文字をファイル名に合わせたフル・パス
返り値
    path = GetCaseSensitiveFullPath( "file.txt" )
    Assert  path = "C:\Folder\File.txt"
サンプル
file.txt に該当するファイルのフルパスが、C:\Folder\File.txt のとき。
本関数は、ファイルシステムにアクセスして、ファイル名を調べます。
ファイルが存在しないときは、カレント フォルダーを基準とした相対パスとして、
フルパスを返します。
テスト
関連
→ T_Path.vbs # [T_GetFullPath]
ソース
→ vbslib.vbs
Function  IsFullPath( Path as string ) as boolen
Path  に指定したパスがフル・パスかどうかを返します。
(src)
テスト
→ T_Path.vbs # [T_IsFullPath]
Function  GetRootSeparatorPosition( Path as string ) as integer
Path  に入っているルート・フォルダーの位置を返します。
【引数】
Path
ファイルなどのパス
返り値
ルート・フォルダーの位置、0=相対パス
Assert  GetRootSeparatorPosition( "C:\File" ) = 3
Assert  GetRootSeparatorPosition( "\File" ) = 1
Assert  GetRootSeparatorPosition( "File" ) = 0
Assert  GetRootSeparatorPosition( "..\File" ) = 0
Assert  GetRootSeparatorPosition( "\\PC01\Folder\File" ) = 14
Assert  GetRootSeparatorPosition( "http://www.example.com/" ) = 23
サンプル
ソース
→ vbslib.vbs
→ T_Path.vbs
テスト
T_GetRootSeparatorPosition
Function  GetFilePathSeparator( Path as string ) as string
Path  に入っているフォルダーの区切り記号を返します。
【引数】
Path
ファイルなどのパス
返り値
フォルダーの区切り記号
Assert  GetFilePathSeparator( "http://www.example.com/" ) = "/"
サンプル
フォルダーの区切り記号が無いときは、"\" を返します。
最も左にある / または \ が、どちらの文字かを返します。
ソース
→ vbslib.vbs
関連
Function  GetPathWithSeparator( in_Path as string ) as string
文字列の末尾に、フォルダーの区切り記号がなければ、追加します。
【引数】
in_Path
ファイルなどのパス
返り値
フォルダーの区切り記号が最後に付いたパス
フォルダーの区切り記号は、in_Path 引数の値に応じて、"\" または "/" が追加されます。
フォルダーのパスの末尾に区切り記号があれば、ファイル名やサブ フォルダー名を追加するときに、
フォルダーのパス + 追加する名前、に統一することができます。
フォルダーのパス +"\"+ 追加する名前、にしないでください。
ソース
→ vbslib.vbs
→ T_Path.vbs
テスト
T_GetPathWithSeparator
サンプル
Assert  GetPathWithSeparator( "C:\BaseFolder" ) = "C:\BaseFolder\"
Assert  GetPathWithSeparator( "C:\" )           = "C:\"
Assert  GetPathWithSeparator( "" )              = ""
Assert  GetPathWithSeparator( "." )             = ""
Assert  GetPathWithSeparator( ".." )            = "..\"
Assert  GetPathWithSeparator( "folder" )        = "folder\"
Assert  GetPathWithSeparator( "folder/sub" )    = "folder/sub/"
Assert  GetPathWithSeparator( "http://www.example.com/fo" ) = "http://www.example.com/fo/"
Assert  GetPathWithSeparator( "http://www.example.com/" )   = "http://www.example.com/"
列挙している文字列の中になければ追加します
末尾にあればカットします
フルパスに変換します
末尾にあるフォルダーの区切り記号を返します
    last_separator = GetLastSeparatorOfPath( path )
    step_path = GetStepPath( path,  base_path ) + last_separator

    Assert  path = "C:\Folder\Sub\"
    Assert  last_separator = "\"
    Assert  base_path = "C:\Folder"
    Assert  step_path = "Sub\"
GetStepPath が削除した最後の \ を復活します。
Function  GetLastSeparatorOfPath( in_Path as string ) as string
文字列の末尾に、フォルダーの区切り記号があれば、それを返します。
【引数】
in_Path
ファイルなどのパス
返り値
"\" または "/" または ""
フォルダーの区切り記号は、"\" または "/" です。
文字列の末尾が、フォルダーの区切り記号でなければ、"" を返します。
サンプル
関連
ソース
→ vbslib.vbs
Function  get_PathNameRegularExpression() as VBScript.RegExp
フォルダーの区切り記号で区切る正規表現オブジェクトを返します。
【引数】
返り値
正規表現オブジェクト
フォルダーの区切り記号は、"\" または "/" です。
サンプル
    Set path_names = get_PathNameRegularExpression().Execute( _
        "sub\a.txt" )
    For Each  name  In path_names
        WScript.echo "FirstIndex = " & name.FirstIndex & _
            ", Length = " & name.Length & ", Value = " & name.Value
    Next
FirstIndex = 0, Length = 4, Value = sub\
FirstIndex = 4, Length = 5, Value = a.txt
T_PathNameRegularExpression
テスト
ソース
→ T_Wildcard.vbs
→ ToolsLib.vbs
サンプル
"sub\a.txt"
パス(検索対象)
区切った後(検索結果)
"sub\", "a.txt"
"sub2/a.txt\"
"sub2/", "a.txt\"
"a.txt"
"a.txt"
""
(検索結果0件)
"\a.txt"
"\", "a.txt"
"\\a.txt"
"\", "\", "a.txt"
"http://www.example.com/~user/"
"http:/", "/", "www.example.com/", "~user/"
関連
Sub  SplitPathToSubFolderSign( in_out_Path as string, out_SubFolderSign as string,
    out_IsFolder as boolean, out_Separator as string )
パスから、サブ フォルダー記号を分離します。
【引数】
in_out_Path
ファイルなどのパス (入力)記号あり、(出力)記号なし
out_SubFolderSign
(出力) サブ フォルダー記号、"." か "*" か ""
(src)
パスの最後の \ の左に * または . を指定することで、サブ フォルダーを
検索するかどうかを指定することができます。
"*\file.txt"
… サブ フォルダーも含めて file.txt を検索する
".\file.txt"
… サブ フォルダーも含めないで file.txt を検索する
"fo\*\file.txt"
"fo\.\file.txt"
… fo フォルダーにある file.txt を検索する
… サブ フォルダーも含めて fo フォルダーの中の file.txt を検索する
(参考) zsh では、** がサブ フォルダーも含めて検索します。
補足
次の関数に、サブ フォルダー記号が使えます。
サンプル
path = "C:\Folder\.\log.txt"
SplitPathToSubFolderSign  path, sign, is_folder, separator
Assert  path = "C:\Folder\log.txt"
Assert  sign = "."
Assert  is_folder = False
Assert  separator = "\"
path (入力)
path (出力)
サブ フォル
ダー記号
"C:\Folder\.\log.txt"
"C:\Folder\log.txt"
"."
"C:\Folder\*\log.txt"
"*"
"C:\Folder\log.txt"
"C:\Folder\log.txt"
""
"C:\Folder\log.txt"
"C:\Folder"
"C:\*\Folder\"
"*"
""
"C:\Folder\*"
"C:\Folder\*\"
"C:\Folder"
""
"C:\Folder\.\"
"."
"C:\Folder"
"C:\.\Folder\"
サンプル
(出力) フォルダー区切り文字
out_Separator
(出力) フォルダー指定かどうか
out_IsFolder
フォルダー
指定かどうか
True
True
True
True
False
False
False
パスの最後が \ のときは、フォルダー(ファイル以外)を指定したことになります。 つまり、
False
False
"C:\Folder\.\*"
"."
"C:\Folder\*"
"C:\Folder\*"
"*"
"C:\Folder\*\*"
False
"C:\Folder\*.txt"
"*"
"C:\Folder\*\*.txt"
""
"C:\Folder\*.txt"
False
"C:\Folder\*.txt"
False
"C:\Folder\*"
""
"C:\Folder\*"
True
True
"C:\Folder\.\*\"
"."
"C:\Folder\*"
"C:\Folder\*"
"*"
"C:\Folder\*\*\"
→ T_Path.vbs
テスト
T_SplitPathToSubFolderSign
… サブ フォルダーも含めて、フォルダー名 folder を検索する
"*\folder\"
\
*\
.\
.\
*\
フォルダーにマッチさせたいときは、最後に \ を付けてください。
(メモ) \ を付ける理由は、Group* のように最後にワイルドカード * があるとき、ファイルと
フォルダーの両方にヒットしてしまうと扱いが難しくなるためです。
関連
Function  ReplaceRootPath( BeforePath as string,
    BeforeRootFullPath as string,  AfterRootFullPath as string,  IsReplaceParent as boolean )
ルート・フォルダーを入れ替えたときのフルパスに変換します。
【引数】
BeforePath
変換する前のパス、フルパス または 相対パス
BeforeRootFullPath
変換する前のルート・フォルダーのフルパス
通常 True、親フォルダー記号を "_parent" に置き換えるかどうか
IsReplaceParent
変換した後のルート・フォルダーのフルパス
AfterRootFullPath
BeforePath を変換した後のフルパス
返り値
サンプル
BeforePath
BeforeRootFullPath = "C:\FolderA"、AfterRootFullPath = "C:\FolderB" のときのサンプルを示します。
IsReplaceParent
返り値
"a.txt"
True
"C:\FolderB\a.txt"
"C:\FolderA\a.txt"
"C:\FolderB\a.txt"
True
"C:\FolderB\sub\a.txt"
True
"sub\a.txt"
True
"C:\FolderB\sub\a.txt"
"C:\FolderA\sub\a.txt"
"C:\FolderC\a.txt"
"C:\FolderB\_parent\FolderC\a.txt"
True
True
"C:\FolderB\_parent\FolderC\a.txt"
"..\FolderC\a.txt"
"C:\FolderC\a.txt"
False
False
"C:\FolderC\a.txt"
"C:\FolderC\a.txt"
"..\FolderC\a.txt"
テスト
ソース
→ vbslib.vbs
→ T_Path.vbs
T_ReplaceRootPath
サンプル
path = ReplaceRootPath( "a.txt", "C:\FolderA", "C:\FolderB", True )
Assert  path = "C:\FolderB\a.txt"
サンプル
path = GetParentFullPath( ReplaceRootPath( "sub\a.txt", "C:\FolderA", "C:\FolderB", True ) )
Assert  path = "C:\FolderB\sub"
BeforePath 引数が相対パスのときは、変換前の BasePath の基準フォルダーが BeforeRootFullPath と
して処理します。
関連
IsReplaceParent 引数について詳細は、
"."
True
"C:\FolderB"
"D:\FolderA\a.txt"
True
(エラー)
Function  GetParentFullPath( Path as string ) as string
Path  に指定したファイルやフォルダの親フォルダのフル・パスを返します。
【引数】
Path
基準パス(相対パスは、カレントからの相対)
返り値
親フォルダのフル・パス
(src)
cd  "C:\Folder"
Assert  GetParentFullPath( "sub\file.txt" ) = "C:\Folder\sub"
関連
参考
サンプル
Assert  ReplaceParentPath( "..\..\folder", "..", "_parent" ) = "_parent\_parent\folder"
Function  ReplaceParentPath( Path as string, FromSign as string, ToSign as string ) as string
親フォルダーの記号を置き換えます。
【引数】
Path
FromSign
置き換える前のパス
置き換える前の親フォルダーの記号
ToSign
置き換えた後の親フォルダーの記号
テスト
サンプル
ソース
置き換えた後のパス
返り値
→ vbslib.vbs
→ T_Path.vbs
T_ReplaceParentPath
親フォルダーにアクセスさせないときに使用します。
返り値に、FromSign の文字列は、全く含まれなくなります。
内部で、
が呼ばれます。
キーワード:
関連
親フォルダーの記号を戻すときにも ReplaceParentPath 関数が使えます。
テスト
→ T_Path.vbs
→ vbslib.vbs
ソース
Assert  GetCommonParentFolderPath( "C:\A\B\File.txt", "C:\A\B\File.txt" ) = "C:\A\B\"
Assert  GetCommonParentFolderPath( "C:\A\File.txt", "D:\A\File.txt" ) = ""
Assert  GetCommonParentFolderPath( "http://example.com/i", "http://example.com/i" ) = _
    "http://example.com/"
Function  GetCommonParentFolderPath( in_PathA as string, in_PathB as string )
共通する親フォルダーのパスを返します。
【引数】
in_PathA
in_PathB
パスA
パスB
返り値
パスA と パスB に共通する親フォルダーのパス、最後は \ または /
サンプル
T_GetCommonParentFolderPath
共通する親フォルダーがあるときは、最後がフォルダーの区切り記号になります。
返す値の最後をフォルダーの区切り記号ではないようにしたいとき
共通する親フォルダーがないときは、"" が返ります。
in_PathA = in_PathB のときは、親フォルダーのパスが返ります。
片方が Empty なら、もう片方のパスがそのまま返ります。
フォルダーのの区切り記号は、\ または / のどちらでも構いません。
Function  GetCommonSubPath( in_PathA as string, in_PathB as string, in_FilePath as string )
共通するサブ フォルダーのパスを返します。
【引数】
in_PathA
in_PathB
パスA
パスB
in_FilePath
パスがファイル名かどうか。 False=フォルダー名
パスA と パスB に共通するサブ フォルダーのパス
返り値
Assert  GetCommonSubPath( "C:\A\B\File.txt", "C:\A\B\File.txt", True ) = "C:\A\B"
Assert  GetCommonSubPath( "C:\A\C\File.txt", "C:\B\C\File.txt", True ) = "C"
Assert  GetCommonSubPath( "C:\A\C\File.txt", "C:\B\D\File.txt", True ) = ""
Assert  GetCommonSubPath( "C:\A\B", "C:\A\B", False ) = "C:\A\B"
Assert  GetCommonSubPath( "C:\A\C", "C:\B\C", False ) = "C"
Assert  GetCommonSubPath( "C:\A\C", "C:\B\D", False ) = ""
Assert  GetCommonSubPath( "", "C:\B\D", False ) = ""
サンプル
テスト
→ T_Path.vbs
→ vbslib.vbs
ソース
T_GetCommonSubPath
返す値の最後をフォルダーの区切り記号にしたいとき
Function  GetIdentifiableFileNames( in_FullPathArray as array of string )
    as dictionary of string
フル パスから、識別可能ファイル名に変換します。
【引数】
in_FullPathArray
フル パスの配列
識別可能ファイル名をキーとした、フル バスの辞書
返り値
テスト
→ T_Path.vbs
→ vbslib.vbs
ソース
T_GetIdentifiableFileNames
同じファイル名がないときは、返り値のキーはファイル名になります。
同じファイル名があるときは、そのファイルの親フォルダー名もキーに含まれます。
    full_paths = Array( _
        "C:\Folder\Sub1\FileA.txt", _
        "C:\Folder\Sub2\FileA.txt", _
        "C:\Folder\Sub2\FileB.txt" )

    Set output = GetIdentifiableFileNames( full_paths )

    id_file_names = Array( _
        "FileB.txt", _
        "Sub1\FileA.txt", _
        "Sub2\FileA.txt" )
    full_paths = Array( _
        "C:\Folder\Sub2\FileB.txt", _
        "C:\Folder\Sub1\FileA.txt", _
        "C:\Folder\Sub2\FileA.txt" )
    Assert  IsSameArray( output.Keys, id_file_names )
    Assert  IsSameArray( output.Items, full_paths )
サンプル
同じフル パスが含まれているときは、エラーにはなりませんが、フル パスから変換しません。
また、辞書のキーは重複できないので、1つにまとめられます。 よって、要素数が減ります。
サンプル
    full_paths = Array( _
        "C:\Folder\Sub\File.txt", _
        "C:\Folder\Sub\File.txt" )

    Set output = GetIdentifiableFileNames( full_paths )

    id_file_names = Array( _
        "C:\Folder\Sub\File.txt" )
    full_paths_answer = Array( _
        "C:\Folder\Sub\File.txt" )
    Assert  IsSameArray( output.Keys, id_file_names )
    Assert  IsSameArray( output.Items, full_paths_answer )
(src)
Function  GetParentFoldersName( FilePath as string, Level as integer,
    SeparatorReplacedStr as Empty or string )
FilePath  に指定したファイルが入ったフォルダーの名前を Level 個つなげたものを返します。
【引数】
FilePath
基準となるファイルまたはフォルダーのパス
Level
親フォルダの個数。 親の方向へたどる数。 1以上
cd  "C:\Folder"
Assert  GetParentFoldersName( "sub\file.txt", 1, "/" ) = "sub"
Assert  GetParentFoldersName( "sub\file.txt", 2, "/" ) = "Folder/sub"
Assert  GetParentFoldersName( "sub\file.txt", 99, "/" ) = "C:/Folder/sub"
サンプル
複数の親フォルダーの名前をつなげたもの
返り値
フォルダー区切り文字を置き換えた後の文字
SeparatorReplacedStr
テスト
→ T_Path.vbs # [T_GetParentFoldersName]
Level が大きすぎても、エラーにはなりません。
Level = 1 なら、ファイルが入っているフォルダーの名前が返ります。
Level = 2 なら、ファイルが入っているフォルダーの親フォルダーの名前と、SeparatorReplacedStr
引数と、ファイルが入っているフォルダーの名前を結合した文字列が返ります
関連
Function  SearchParent( StepPath as string ) as string
StepPath  に指定したファイルまたはフォルダを、親フォルダに向かって探します。
【引数】
StepPath
ファイル名、または相対パス
返り値
見つかったファイルまたはフォルダのフル・パス
  Set root = LoadXML( SearchParent( "common.xml" ), Empty )
(src)
→ T_Path.vbs
テスト
..\common.xml などを開きます
関連
を使ってピリオドを3つ並べる記法を展開する
T_SearchParent
サンプル
B2
%~1
%return_value%
C:\A\B\B2
カレント フォルダーが、C:\A\B\C で、下記のフォルダーまたはファイルがあるとき、
C:\A\A2
A2
C2
C:\A\B\C\C2
C:\A\B\B2
B\B2
引数と返り値の関係は、以下のようになります。
C:\A\A2
C:\A\B\B2
C:\A\B\C\C2
C:\A\B\C
NotFound
Empty
サンプル